﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades;
using System.Data;
namespace AccesoBD
{
    public class Domicilios
    {
        public static Domicilio obtenerDomicilio(long id)
        {
            Domicilio oD = null;
            SqlConnection con = DB.Conectar();
            try
            {
                string comando = "select * from Domicilio where idDomicilio=@id";
                List<SqlParameter> listp = new List<SqlParameter>();
                listp.Add(new SqlParameter("@id", id));
                SqlDataReader dr = DB.GenerarReader(comando, listp, con);
                if (dr.Read())
                {
                    oD = new Domicilio();
                    oD.calle = dr["calle"].ToString();
                    oD.numero = int.Parse(dr["numero"].ToString());
                    oD.idBarrio = int.Parse(dr["idBarrio"].ToString());
                    if (dr["piso"] != DBNull.Value)
                    {
                        oD.piso = int.Parse(dr["piso"].ToString());

                    }
                    if (dr["departamento"] != DBNull.Value)
                    {
                        oD.Departamento = dr["departamento"].ToString();
                    }
                    if (dr["codigoPostal"] != DBNull.Value)
                    {
                        oD.codPostal = int.Parse(dr["codigoPostal"].ToString());
                    }

                }

            }
            catch (Exception Ex)
            {

                throw new Exception("Error al buscar domicilio:" + Ex.Message);
            }
            finally
            {
                con.Close();
            }
            return oD;

        }
        public static void registrarDomicilio(Domicilio Dom, out long idDomicilio)
        {
            SqlConnection con = null;
            SqlTransaction tran = null;
            con = DB.Conectar();
            idDomicilio = -1;
            if (Dom.idDomicilio == 0)
            {
                try
                {
                    tran = con.BeginTransaction();
                    string comando = "insert into Domicilio (idDomicilio, calle, numero, piso,departamento,idBarrio,codigoPostal) values (@idDomicilio, @calle, @numero, @piso,@departamento,@idBarrio,@codigoPostal)";
                    List<SqlParameter> listp = new List<SqlParameter>();
                    listp.Add(new SqlParameter("@idDomicilio", Dom.idDomicilio));
                    listp.Add(new SqlParameter("@calle", Dom.calle));
                    listp.Add(new SqlParameter("@idDomicilio", Dom.idDomicilio));
                    listp.Add(new SqlParameter("@numero", Dom.numero));
                    listp.Add(new SqlParameter("@piso", Dom.piso));
                    listp.Add(new SqlParameter("@departamento", Dom.Departamento));
                    listp.Add(new SqlParameter("@idBarrio", Dom.idBarrio));
                    listp.Add(new SqlParameter("@codigoPostal", Dom.codPostal));
                    int result = DB.EjecutarCommand(comando, listp, con, tran);
                    if (result > 0)
                    {
                        idDomicilio = ObtenerUltimoIDDomicilio(tran, con);
                        tran.Commit();
                    }
                }
                catch (Exception Ex)
                {

                    if (tran != null)
                    {
                        tran.Rollback();
                    }
                    throw new Exception("Error al registrar un domicilio", Ex);
                }
                finally
                {
                    con.Close();
                }

            }

        }
        public static long ObtenerUltimoIDDomicilio(SqlTransaction tran, SqlConnection con)
        {

            long id = 0;

            try
            {
                string comando = "select Max(idDomicilio)as ID from Domicilio";
                List<SqlParameter> listp = new List<SqlParameter>();
                string escalar = DB.EjecutarScalar(comando, listp, con, tran);
                if (!string.IsNullOrEmpty(escalar.ToString()))
                {//Tener en cuenta si retorna siempre null. Siempre retornaria cero

                    id = long.Parse(escalar.ToString());
                }

            }
            catch (Exception Ex)
            {

                throw new Exception("Error al obtener ultimo Id del domicilio", Ex);
            }


            return id;
        }


    }
}
